# -*- coding: utf-8 -*-

 ###############################################
 ##                                             ##
 ##   View (Main)                                ##
 ##                                              ##
 ##                                              ##
 ##   for Basiq Series                           ##
 ##   by Críptidos Digitales                     ##
 ##   GPL (c)2008                                ##
  ##                                             ##
    ###############################################


import os
import time
from PyQt4 import QtCore, QtGui

from cdWidgets import passWidget

import man


import principal_ui
import access
import administracion
import herramientas
import mantenimiento
import puntoVenta
import tips
import about

from cdWidgets.cdMainWindow import CDMainWindow

# def inicializa():
    # administracion.inicializa()



class Form(CDMainWindow):

    @property
    def app(self):
        return self.__app

    @property
    def status(self):
        return self.__status

    def __init__(self, *args, **kwds):
        m = "principal.form.__init__()"

        if kwds.has_key('app'):
            self.__app = kwds.pop('app')
        else:
            self.__app = None

        CDMainWindow.__init__(self,  *args)

        self.ui = principal_ui.Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowTitle(self.app.info['title'])
        self.setWindowIcon(QtGui.QIcon("imagenes/logo.png"))

        self.__status = [0,0]

        self.slide = passWidget.CDPassWidget(self.ui.baseFrame)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(1)
        self.slide.setSizePolicy(sizePolicy)
        self.slide.setMode('toggle')

        self.ui.layout.addWidget(self.slide)

        font = QtGui.QFont()
        font.setFamily("Microsoft Sans Serif")
        font.setPointSize(9*self.app.fontZoom)
        font.setWeight(75)
        font.setBold(True)

        ## PUNTO DE ATENCION
        self.ui.puntoVenta = puntoVenta.Forma(self.ui.baseFrame, app=self.app, owner=self, eventRouter=self)
        self.slide.addWidget(self.ui.puntoVenta)
        self.ui.puntoVenta.ui.title.setText(u"MOSTRADOR")
        self.ui.puntoVenta.ui.title.setStyleSheet("color:#0000FF; background-color:#A0A0FF;")

        self.connect(self.ui.puntoVenta, QtCore.SIGNAL('clientesChanged()'), self.clientesChanged)
        self.connect(self.ui.puntoVenta, QtCore.SIGNAL('lugaresChanged()'), self.lugaresChanged)
        # self.connect(self.ui.puntoVenta, QtCore.SIGNAL('ventasChanged()'), self.ventasChanged)
        self.connect(self.ui.puntoVenta, QtCore.SIGNAL('equiposChanged()'), self.equiposChanged)
        self.connect(self.ui.puntoVenta, QtCore.SIGNAL('serviciosChanged()'), self.serviciosChanged)

        widget = self.ui.boPuntoVenta
        self.ui.buttonsLayout2.removeWidget(widget)
        widget.close()
        self.ui.boPuntoVenta = QtGui.QPushButton(self.ui.frameBotones)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.ui.boPuntoVenta.sizePolicy().hasHeightForWidth())
        self.ui.boPuntoVenta.setSizePolicy(sizePolicy)
        self.ui.boPuntoVenta.setMaximumSize(QtCore.QSize(16777215, 50))
        self.ui.boPuntoVenta.setObjectName("boPuntoVenta")
        self.ui.boPuntoVenta.setFont(font)
        self.ui.boPuntoVenta.setText(QtGui.QApplication.translate("MainWindow", "M&OSTRADOR", None, QtGui.QApplication.UnicodeUTF8))
        # self.ui.boPuntoVenta.setStyleSheet("color:#0000FF; background-color:qlineargradient(x1:0, y1:0, x2:1.0, y2:1.0, stop:0 white, stop:1 #8080FF);")
        self.ui.boPuntoVenta.setStyleSheet("QPushButton {color:#0000FF; background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #FFFFFF, stop:1 #8080FF); border-radius:9; border-color:#808080; border-width:1; border-style:outset; padding:3;} QPushButton:pressed{padding-top:5; padding-left:5; background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #8080FF, stop:1 #FFFFFF); border-style:inset;} QPushButton:hover{background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #E0E0E0, stop:1 #7070D0);} QPushButton:disabled{color:#F0F0F0; background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #F0F0F0, stop:1 #909090);} QPushButton:focus{border-color:#404040; border-width:3;}")
        self.ui.buttonsLayout2.addWidget(self.ui.boPuntoVenta)

        self.connect(self.ui.boPuntoVenta, QtCore.SIGNAL("clicked()"), self.showPuntoVenta)

        ## ADMINISTRACION
        self.ui.administracion = administracion.Forma(self.ui.baseFrame, owner=self, app=self.app)
        self.ui.administracion.setStyleSheet("QFrame{background-color:#F0FFF0;}")
        self.slide.addWidget(self.ui.administracion)
        self.ui.administracion.ui.title.setText(u"CONTROL DE PROCESOS")
        self.ui.administracion.ui.title.setStyleSheet("color:#00C000; background-color:#AFFFAF;")
        # self.connect(self.ui.administracion, QtCore.SIGNAL('comprasChanged()'), self.comprasChanged)
        # self.connect(self.ui.administracion, QtCore.SIGNAL('pedidosChanged()'), self.pedidosChanged)
        # self.connect(self.ui.administracion, QtCore.SIGNAL('productosChanged()'), self.productosChanged)

        widget = self.ui.boAdministracion
        self.ui.buttonsLayout2.removeWidget(widget)
        widget.close()
        self.ui.boAdministracion = QtGui.QPushButton(self.ui.frameBotones)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.ui.boAdministracion.sizePolicy().hasHeightForWidth())
        self.ui.boAdministracion.setSizePolicy(sizePolicy)
        self.ui.boAdministracion.setMaximumSize(QtCore.QSize(16777215, 50))
        self.ui.boAdministracion.setObjectName("boAdministracion")
        self.ui.boAdministracion.setFont(font)
        self.ui.boAdministracion.setText(QtGui.QApplication.translate("MainWindow", u"CONTROL DE &PROCESOS", None, QtGui.QApplication.UnicodeUTF8))
        # self.ui.boAdministracion.setStyleSheet("color:#00C000; background-color:qlineargradient(x1:0, y1:0, x2:1.0, y2:1.0, stop:0 white, stop:1 #80FF80);")
        self.ui.boAdministracion.setStyleSheet("QPushButton {color:#00C000; background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #FFFFFF, stop:1 #80FF80); border-radius:9; border-color:#808080; border-width:1; border-style:outset; padding:3;} QPushButton:pressed{padding-top:5; padding-left:5; background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #80FF80, stop:1 #FFFFFF); border-style:inset;} QPushButton:hover{background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #E0E0E0, stop:1 #70D070);} QPushButton:disabled{color:#F0F0F0; background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #F0F0F0, stop:1 #909090);} QPushButton:focus{border-color:#404040; border-width:3;}")
        self.ui.buttonsLayout2.addWidget(self.ui.boAdministracion)
        self.connect(self.ui.boAdministracion, QtCore.SIGNAL("clicked()"), self.showAdministracion)

        ## MANTENIMIENTO
        self.ui.mantenimiento = mantenimiento.Forma(self.ui.baseFrame, app=self.app, owner=self)

        self.ui.mantenimiento.setStyleSheet("QFrame{background-color:#FFFFE0;}")
        self.slide.addWidget(self.ui.mantenimiento)
        self.ui.mantenimiento.ui.title.setText(u"MANTENIMIENTO DE DATOS")
        self.ui.mantenimiento.ui.title.setStyleSheet("color:#8F7F00; background-color:#FFFF80;")

        # self.connect(self.ui.mantenimiento, QtCore.SIGNAL('clasificacionesChanged()'), self.clasificacionesChanged)
        self.connect(self.ui.mantenimiento, QtCore.SIGNAL("equiposChanged()"), self.equiposChanged)
        # self.connect(self.ui.mantenimiento.modules['productos'].igu, QtCore.SIGNAL("productosChanged()"), self.productosChanged)
        self.connect(self.ui.mantenimiento.modules['clientes'].igu, QtCore.SIGNAL('changed()'), self.clientesChanged)
        self.connect(self.ui.mantenimiento.modules['empleados'].igu, QtCore.SIGNAL('changed()'), self.empleadosChanged)
        self.connect(self.ui.mantenimiento.modules['proveedores'].igu, QtCore.SIGNAL('changed()'), self.proveedoresChanged)
        self.connect(self.ui.mantenimiento, QtCore.SIGNAL('lugaresChanged()'), self.lugaresChanged)

        self.ui.boMantenimiento = QtGui.QPushButton(self.ui.frameBotones)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.ui.boMantenimiento.sizePolicy().hasHeightForWidth())
        self.ui.boMantenimiento.setSizePolicy(sizePolicy)
        self.ui.boMantenimiento.setMaximumSize(QtCore.QSize(16777215, 50))
        self.ui.boMantenimiento.setObjectName("boMantenimiento")
        self.ui.boMantenimiento.setFont(font)
        self.ui.boMantenimiento.setText(QtGui.QApplication.translate("MainWindow", "MAN&TENIMIENTO DE DATOS", None, QtGui.QApplication.UnicodeUTF8))
        # self.ui.boMantenimiento.setStyleSheet("color:#8F7F00; background-color:qlineargradient(x1:0, y1:0, x2:1.0, y2:1.0, stop:0 white, stop:1 #FFFF80);")
        self.ui.boMantenimiento.setStyleSheet("QPushButton {color:#8F7F00; background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #FFFFFF, stop:1 #FFFF80); border-radius:9; border-color:#808080; border-width:1; border-style:outset; padding:3;} QPushButton:pressed{padding-top:5; padding-left:5; background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #FFFF80, stop:1 #FFFFFF); border-style:inset;} QPushButton:hover{background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #F0F0F0, stop:1 #C0C070);} QPushButton:disabled{color:#F0F0F0; background-color:qlineargradient(x1:0,y1:0,X2:0,y2:1,stop:0 #F0F0F0, stop:1 #909090);} QPushButton:focus{border-color:#404040; border-width:3;}")
        self.ui.buttonsLayout2.addWidget(self.ui.boMantenimiento)
        self.connect(self.ui.boMantenimiento, QtCore.SIGNAL("clicked()"), self.showMantenimiento)

        ## HERRAMIENTAS
        self.ui.herramientas = herramientas.Forma(self.ui.baseFrame, app=self.app, owner=self, eventRouter=self)
        self.slide.addWidget(self.ui.herramientas)
        # self.ui.boHerramientas.setStyleSheet("background-color:#DFDFDF")
        self.connect(self.ui.boHerramientas, QtCore.SIGNAL("clicked()"), self.showHerramientas)
        # self.connect(self.ui.herramientas, QtCore.SIGNAL('cuentasChanged()'), self.cuentasChanged)
        # self.connect(self.ui.herramientas, QtCore.SIGNAL('capturaPagoObligatoriaChanged'), self.capturaPagoObligatoriaChanged)
        # self.connect(self.ui.herramientas, QtCore.SIGNAL('capturaClasificacionObligatoriaChanged'), self.capturaClasificacionObligatoriaChanged)
        # self.connect(self.ui.herramientas, QtCore.SIGNAL('capturaActualPermitida'), self.capturaActualPermitidaChanged)
        # self.connect(self.ui.herramientas, QtCore.SIGNAL('capturaLineaToggled()'), self.capturaLineaToggled)
        # self.connect(self.ui.herramientas, QtCore.SIGNAL('tipoProductoDefaultChanged'), self.tipoProductoDefaultChanged)
        # self.connect(self.ui.herramientas, QtCore.SIGNAL('rangosPrecioChanged()'), self.rangosPrecioChanged)
        # self.connect(self.ui.herramientas, QtCore.SIGNAL('usarCodigoSecundarioChanged()'), self.usarCodigoSecundarioChanged)
        # self.connect(self.ui.herramientas, QtCore.SIGNAL('mostrarTipsChanged()'), self.mostrarTipsChanged)

        ## PRINCIPAL

        lb1 = QtGui.QLabel(self.slide)
        lb1.setPixmap(QtGui.QPixmap("imagenes/logo.png"))

        frame0 = QtGui.QFrame(self.ui.baseFrame)
        frame0.setStyleSheet("background-color:#B0B070;")

        self.ui.layout0 = QtGui.QHBoxLayout(frame0)
        self.ui.layout0.addItem(QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum))
        self.ui.layout0.addWidget(lb1)
        self.ui.layout0.addItem(QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum))

        self.slide.addWidget(frame0, 0, True)

        ## INFORMACIÓN
        self.ui.informacion = QtGui.QTextEdit(self)
        self.ui.informacion.hide()
        self.ui.informacion.setStyleSheet("background-color:#FFFFA0;")
        self.informacion = u"Empresa Básica, the best!"

        self.connect(self.ui.toInformacion, QtCore.SIGNAL('enter()'), self.showInformacion)
        self.connect(self.ui.toInformacion, QtCore.SIGNAL('leave()'), self.hideInformacion)
        self.connect(self.ui.toInformacion, QtCore.SIGNAL('clicked()'), self.about)
        self.connect(self.ui.boSalir, QtCore.SIGNAL("clicked()"), self.salir)

        ## TIPS
        self.ui.tips = tips.Forma(app=self.app)
        if man.atributoI(grupo=u'sistema', nombre=u'mostrarTips').valor == u"1":
            self.ui.tips.show()
        self.connect(self.ui.tips, QtCore.SIGNAL('mostrarTipsChanged()'), self.mostrarTipsChanged)

        if self.app.config.pull('layout', 'windowState'):
            self.restoreGeometry(QtCore.QByteArray().fromBase64(self.app.config.pull('layout', 'windowState')))
        else:
            geometry = self.app.screenGeometry
            self.setGeometry(geometry.width()*.15, geometry.height()*.15, geometry.width()*.70, geometry.height()*.70)
            self.setWindowState(self.windowState() ^ QtCore.Qt.WindowMaximized)

        self.connect(self, QtCore.SIGNAL('F10Pressed()'), self.focusMainTools)
        self.connect(self, QtCore.SIGNAL('proteccionF10Changed()'), self.proteccionF10Changed)
        self.connect(self, QtCore.SIGNAL('proveedoresChanged()'), self.proveedoresChanged)

        self.showPuntoVenta()




    def about(self):
        form = about.Form(self, owner=self, app=self.app)
        # form.exec_()
        result = form.show()

    def clientesChanged(self):
        # print (), "principal.form.clientesChanged()"
        self.emit(QtCore.SIGNAL("clientesChangedBroadcast()"))

    def closeEvent(self, event):
        # print (), "principal.form.closeEvent()"
        self.ui.tips.destroy()
        self.app.config.push('layout', 'windowstate', self.saveGeometry().toBase64())

    def empleadosChanged(self):
        # print (), "principal.form.empleadosChanged()"
        self.emit(QtCore.SIGNAL("empleadosChangedBroadcast()"))

    def equiposChanged(self):
        # print (), "principal.form.equiposChanged()"
        self.emit(QtCore.SIGNAL("equiposChangedBroadcast()"))

    def focusMainTools(self):
        # print (), "principal.form.focusMainTools()"
        if man.atributoI(grupo=u'sistema', nombre=u'proteccionF10').valor:
            if self.ui.frameBotones.isEnabled():
                self.ui.frameBotones.setEnabled(False)
                self.ui.frameBotones.setToolTip(u"Presiona F10 para activar esta barra")
            else:
                self.ui.frameBotones.setEnabled(True)
                self.ui.frameBotones.setToolTip("")
                self.ui.frameBotones.setFocus()

    def hideInformacion(self):
        self.ui.informacion.hide()

    def lugaresChanged(self):
        # print (), "principal.form.lugaresChanged()"
        self.emit(QtCore.SIGNAL('lugaresChangedBroadcast()'))

    def mostrarTipsChanged(self):
        self.emit(QtCore.SIGNAL('mostrarTipsChangedBroadcast()'))

    # def pedidosChanged(self):
        # self.emit(QtCore.SIGNAL('pedidosChangedBroadcast()'))

    def proteccionF10Changed(self):
        m = "principal.form.proteccionF10Changed()"
        print (1), m

        if man.atributoI(grupo=u'sistema', nombre=u'proteccionF10').valor:
            self.ui.frameBotones.setEnabled(False)
            self.ui.frameBotones.setToolTip(u"Presiona F10 para activar esta barra")

    def proveedoresChanged(self):           # print "principal.form.proveedoresChanged()"
        self.emit(QtCore.SIGNAL("proveedoresChangedBroadcast()"))

    def salir(self):
        self.close()

    def serviciosChanged(self):
        self.emit(QtCore.SIGNAL('serviciosChangedBroadcast()'))

    def showAdministracion(self):
        if not self.slide.currentWidget() == self.ui.administracion:
            self.slide.show(self.ui.administracion)
            self.__status[0] = u'management'
        else:
            self.app.beep()
        if man.atributoI(grupo=u'sistema', nombre=u'proteccionF10').valor:
            self.ui.frameBotones.setEnabled(False)
            self.ui.frameBotones.setToolTip(u"Presiona F10 para activar esta barra")

    def showHerramientas(self):
        if not self.slide.currentWidget() == self.ui.herramientas:
            if man.atributoI(grupo=u'sistema', nombre=u'contrasenaHerramientas').valor:
                formaAcceso = access.Form(u"Acceso a Herramientas", app=self.app, modo=u'herramientas')
                result = formaAcceso.exec_()
                formaAcceso.destroy()
            else:
                result = QtGui.QDialog.Accepted
            if result == QtGui.QDialog.Accepted:
                self.slide.show(self.ui.herramientas)
                self.informacion = u"Mucho cuidado con lo que haces en este módulo"
                self.__status[0] = u'tools'
        else:
            self.app.beep()

    def showInformacion(self):
        if self.informacion:
            self.ui.informacion.setGeometry(self.ui.toInformacion.x(), self.height()-175, 200, 100)
            self.ui.informacion.setText(self.informacion)
            self.ui.informacion.show()
            self.__status[0] = u'information'

    def showMantenimiento(self):            # print "principal.Form.showMantenimiento()"
        if not self.slide.currentWidget() == self.ui.mantenimiento:
            if man.atributoI(grupo=u'sistema', nombre=u'contrasenaMantenimiento').valor:
                formaAcceso = access.Form(u"Acceso a Mantenimiento", app=self.app, modo=u'herramientas')
                result = formaAcceso.exec_()
                formaAcceso.destroy()
            else:
                result = QtGui.QDialog.Accepted
            if result:
                self.slide.show(self.ui.mantenimiento)
                self.__status[0] = u'maintenance'
                if man.atributoI(grupo=u'sistema', nombre=u'proteccionF10').valor:
                    self.ui.frameBotones.setEnabled(False)
                    self.ui.frameBotones.setToolTip(u"Presiona F10 para activar esta barra")
        else:
            self.app.beep()
            if man.atributoI(grupo=u'sistema', nombre=u'proteccionF10').valor:
                self.ui.frameBotones.setEnabled(False)
                self.ui.frameBotones.setToolTip(u"Presiona F10 para activar esta barra")

    def showPuntoVenta(self):
        if not self.slide.currentWidget() == self.ui.puntoVenta:
            self.slide.show(self.ui.puntoVenta)
            self.__status[0] = u'pos'
        else:
            self.app.beep()
        if man.atributoI(grupo=u'sistema', nombre=u'proteccionF10').valor:
            self.ui.frameBotones.setEnabled(False)
            self.ui.frameBotones.setToolTip(u"Presiona F10 para activar esta barra")


# print (0), "principal           end"

